#include <stdio.h>
#include <stdlib.h>
// 二叉树遍历的一些应用
// 先来构建树的一些操作
typedef struct TreeNode *BinTree;
struct TreeNode
{
    int Data;
    BinTree left;
    BinTree right;
};

// 输出二叉树中的叶子结点
void PreOrderPrintLeaves(BinTree BT)
{
    if (BT != NULL)
    {
        if (BT->left == NULL && BT->right == NULL)
            printf("%d ", BT->Data);
        PreOrderPrintLeaves(BT->left);
        PreOrderPrintLeaves(BT->right);
    }
}

// 求二叉树的高度

// 首先明确一点，Height = max{左子树，右子树} + 1

int PostOrderGetHeight(BinTree BT)
{
    int HL, HR, MaxH;

    if (BT != NULL)
    {
        HL = PostOrderGetHeight(BT->left);
        HR = PostOrderGetHeight(BT->right);
        MaxH = (HL >= HR) ? HL : HR;

        return (MaxH + 1);
    }
    else
        return 0; // 空树高度为0
}

// 二元运算表达式树及其遍历
// 根据先序遍历和中序遍历来求一个二叉树的结构
// 一个中序遍历再加上另一个遍历方法就可以确定一个二叉树结构
